﻿/* 编码选择带BOM的utf8,工具栏的编译工具(set current Platform,在运行图标左边)选择Unicode,即可在组件中正确显示中文!
  Winkawaks一键连发脚本,按一q键自动连发,再按q键或a键中止连发
*/
#NoEnv
#MaxThreadsPerHotkey 2 ;必要,一个热键可以运行2个线程,这样同一个键才能同时做到开启和中止连射
SendMode, Input ;对Winkawaks比较有效

/* 常量,以CT开头 
*/
CTfireKey := "x" ;开枪键

/* 全局变量,以GV开头
*/
GVfireDuration := 50 ;自动连射键的按键时长
GVfireDelay := 50 ;自动连射延时
GVfireSwitch := 0 ;自动连射开关,0表示关闭
;GVsbText := "autoFire status" ;状态栏文本

/* 加入Gui,设置响应 
*/
;加入Gui并返回
Gui, Add, Text, ,按键持续时长:
Gui, Add, Edit, vGVfireDuration, %GVfireDuration%
Gui, Add, Text, ,连射延时:
Gui, Add, Edit, vGVfireDelay, %GVfireDelay%
Gui, Add, Button, ym, Submit_ ;提交
Gui, Add, Button, , Exit ;结束app
Gui, Add, StatusBar, , autoFire off ;状态栏,显示自动连射是否已经开启
Gui, Show,w280h120, WinKawaks 一键连发脚本
return

;提交数据
ButtonSubmit_: 
Gui, Submit,NoHide ; 保存用户输入后每个控件的数据,NoHide可以在提交数据后保持窗体显示
MsgBox, 数据提交成功!
return

;响应关闭app
ButtonExit:
GuiClose:
ExitApp
return

/* 自定义函数
*/
;改变连射状态为x状态,0为中止,1为开启
switchAutoFire(x) {
  global GVfireSwitch
  GVfireSwitch := x
  if (GVfireSwitch)
    SB_SetText("autoFire on")
  else
    SB_SetText("autoFire off")
  return
}

/* 设置快捷键
*/
#IfWinActive, ahk_exe WinKawaks.exe
;开启/关闭连射
~q::
if (GVfireSwitch) {
  switchAutoFire(0)
  return
}
switchAutoFire(1)
while (GVfireSwitch){
  IfWinNotActive, ahk_exe WinKawaks.exe 
  {
    switchAutoFire(0)
    break
  }
  send {%CTfireKey% down}
  sleep, %GVfireDuration%
  send {%CTfireKey% up}
  sleep, %GVfireDelay%
}
return

;中止连射
~a::
switchAutoFire(0)
return

;暂停
~numpad0::
~numpad1::
~RCtrl::
send {enter down}
sleep, 100
send {enter up}
return

#IfWinActive